package com.xjtu.mybatisplus;

public class Demo {
    //描述资源。属性：商品名称和编号，  行为：对商品名称赋值，获取商品。
    static class Resource {
        private String name;
        private int count = 1;

        //对外提供设置商品的方法
        public void set(String name) {
            //给成员变量赋值并加上编号。
            this.name = name + count;
            //编号自增。
            count++;
            //打印生产了哪个商品。
            System.out.println(Thread.currentThread().getName() + ".....生产了...." + this.name);
        }

        public void get() {
            System.out.println(Thread.currentThread().getName() + ".....消费了...." + this.name);
        }
    }

    //描述生产者
   static class Producer implements Runnable {
        private Resource r;

        //生产者以创建就应该明确资源
        Producer(Resource r) {
            this.r = r;
        }

        //生产者生产商品的任务
        public void run() {
            //生产者无限制的生产
            while (true) {
                r.set("面包");
            }
        }
    }

    //描述消费者
   static class Consumer implements Runnable {
        private Resource r;

        //生产者以创建就应该明确资源
        Consumer(Resource r) {
            this.r = r;
        }

        //生产者生产商品的任务
        public void run() {
            while (true) {
                r.get();
            }
        }
    }

    public static void main(String[] args) {
        //创建资源对象
        Resource r = new Resource();

        //创建生产者对象
        Producer pro = new Producer(r);
        //创建消费者对象
        Consumer con = new Consumer(r);

        //创建线程对象
        Thread t1 = new Thread(pro);
        Thread t2 = new Thread(con);
        //开启线程
        t1.start();
        t2.start();
    }
}
